#pragma once
#include "../stdafx.h"
#include "StateMachine/stdafx.h"
#include "game/FightSM.h"

class FightSM;
class LogicEngine;
	class StoryState: public State<LogicEngine>
	{
	private:

		StoryState(){}

		//copy ctor and assignment should be private
		StoryState(const StoryState&);
		StoryState& operator=(const StoryState&);

	public:

		static StoryState* Instance();

	public:

		virtual void Enter(LogicEngine* lsm);

		virtual void Execute(LogicEngine* lsm);

		virtual void Exit(LogicEngine* lsm);

		virtual bool OnMessage(LogicEngine* lsm,boost::any p);

	};

	class FightState: public State<LogicEngine>
	{
	private:

		FightState();

		//copy ctor and assignment should be private
		FightState(const FightState&);
		FightState& operator=(const FightState&);

		FightSM m_fSM;


	public:
		static FightState* Instance();

	public:
		virtual void Enter(LogicEngine* lsm);

		virtual void Execute(LogicEngine* lsm);

		virtual void Exit(LogicEngine* lsm);

		virtual bool OnMessage(LogicEngine* lsm, boost::any p);

	};

	class MenuState: public State<LogicEngine>
	{
	private:

		MenuState(){}

		//copy ctor and assignment should be private
		MenuState(const MenuState&);
		MenuState& operator=(const MenuState&);

	public:

		static MenuState* Instance();

	public:

		virtual void Enter(LogicEngine* lsm);

		virtual void Execute(LogicEngine* lsm);

		virtual void Exit(LogicEngine* lsm);

		virtual bool OnMessage(LogicEngine* lsm,boost::any p);

	};